package mercadologico.entities.tables;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

import mercadologico.dao.PersistenceEmbalagem;

import exceptions.PersistenceExceptionMessage;
import generic.interfaces.GenericPersistence;
import generic.interfaces.IDEntity;
import generic.interfaces.PersistInFile;

@Entity
public class Embalagem implements IDEntity<Integer>, GenericPersistence<PersistenceEmbalagem, Integer, Embalagem>, PersistInFile<Embalagem>, Comparable<Embalagem>{

	public static PersistenceEmbalagem persist = new PersistenceEmbalagem();
	
	@Id
	private Integer id;
	@Column(length=20)
	private String descricao;
	@Column(length=3)
	private String abreviacao;
	

	
	public Integer getId() {
		return this.id;
	}
	
	public void setId(Integer id) {
		this.id = id;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	
	public String getAbreviacao() {
		return abreviacao;
	}
	public void setAbreviacao(String abreviacao) {
		this.abreviacao = abreviacao;
	}
	
	public PersistenceEmbalagem DAOInstance() {
		if (persist == null) {
			persist = new PersistenceEmbalagem();
		}
		return persist;
	}

	
	public Embalagem find(Integer id) throws PersistenceExceptionMessage {
		return DAOInstance().find(id);
	}

	
	public void persist() throws PersistenceExceptionMessage {
		DAOInstance().persist(this);
	}

	
	public void remove() {
		// TODO Auto-generated method stub
		
	}

	
	public Embalagem merge() throws PersistenceExceptionMessage {
		return DAOInstance().merge(this);
	}

	
	public ArrayList<Embalagem> findAll() throws PersistenceExceptionMessage {
		return (ArrayList<Embalagem>) DAOInstance().findAll();
	}
	
	public String toString() {
		return getDescricao();
	}
	
	public int compareTo(Embalagem arg0) {
		return getDescricao().compareTo(arg0.getDescricao());
	}
	
	public Embalagem getInstanceFromArray(String[] str) {
		for (String string : str) {
			if (string == null)
				return null;
			if (string.trim().length() == 0)
				return null;
		}

		if (str != null && str.length == 3) {
			Embalagem embalagem = new Embalagem();
			embalagem.setId(Integer.parseInt(str[0]));
			embalagem.setDescricao(str[1]);
			embalagem.setAbreviacao(str[2]);
			return embalagem;
		}
		return null;
	}
	
	public int removeAll() throws PersistenceExceptionMessage {
		return DAOInstance().removeAll();
	}
	
	public Collection<Embalagem>  order(ArrayList<Embalagem> entities) {
		Collections.sort(entities);
		return entities;
	}
		
	public ArrayList<String> getArrayAsString() throws PersistenceExceptionMessage {
		ArrayList<String> strs = new ArrayList<String>();
		for (Embalagem em : order((ArrayList<Embalagem>) DAOInstance().findAll())) {
			strs.add(em.getId() +"|" +em.getDescricao() +"|" +getAbreviacao());
		}
		return strs;
	}
}
